

package business.coding
import business.coding.WeightType;
import dao.Center
import dao.CorpGroup
import dao.Word
import groovy.sql.GroovyRowResult
import utils.*;
import org.apache.log4j.Logger;
import business.database.Database;
import business.ViewLogger;
import business.parser.*;

import java.util.List;
import java.util.regex.Pattern;
import utils.Configuration;

import javax.security.auth.login.Configuration;

/**
 * Esta clase se encarga de obtener el codigo de centros extranjeros
 * @author 53385255R
 *
 */
class CodeForeign {
	
	static Logger _log
	
	/**
	 * Direccion completa del corp
	 */
	private SegmentatedCorp _corp;

	
	
   public CodeForeign(SegmentatedCorp corp) {
		_log = Logger.getLogger("CodeForeign");
		_corp = corp;
		
		
	}
	
	/**
	 * Obtiene el centro extranjero del corp
	 * Lo que hace es coger los segmentos de provincia y pais y buscar las palabras clave en la base de conocimiento
	 * @return
	 */
	public List<CenterWeightAndWords> getForeignCenter() {
		
		List<CenterWeightAndWords> codes = new ArrayList<CenterWeightAndWords>();
		
		getForeignWords().each { 
			String word = it
			
			getForeignCodes(word).each { 
				
				String code = it
					  CenterWeightAndWords cenW = new CenterWeightAndWords();
					 Center cen = new Center ("--", "9", "------", "--------","");
					 cen.setISO code
					 ViewLogger.getInstance().info "ISO ${code}"
					 cenW.setCenter cen
					 cenW.set_context 100.0
					 
					 codes.add(cenW)
					 return;
				 }
			
			if (codes.size() > 0) return;
		}
		
		return codes;
	}
	
	/**
	 * Obtiene todas las palabras del grupo pais extranjero
	 * @return
	 */
	private List<String> getForeignWords() {
		List<String> words = new ArrayList<String>();
		
		business.database.WordUtils.getIdGroupsByType(_corp.get_idcorp(), -3).each {
			int idG = it
			words.addAll(business.database.WordUtils.getWordsNames(idG))
		}
		
		return words;
	}
	
	/**
	 * Comprueba si alguna de las palabras dadas tiene un codigo extranjero y los devuelve
	 * @param words
	 * @return
	 */
	private List<String> getForeignCodes(String word) {
		List<String> codes = new ArrayList<String>();
		
		String sql = "select code from foreignword where word = '${word}'"
			Database.getInstance().sqlKnBase.eachRow(sql, {
				String code = it[0]	
				codes.add(code)

			})
		
		return codes;
	}
	
	
   
}

